package com.grechur.wanandroidcompose.http

import android.app.Application
import android.content.Context
import com.franmontiel.persistentcookiejar.ClearableCookieJar
import com.franmontiel.persistentcookiejar.PersistentCookieJar
import com.franmontiel.persistentcookiejar.cache.SetCookieCache
import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory


object RetrofitClient {
    private const val baseUrl = "https://www.wanandroid.com"
    var cookieJar: ClearableCookieJar?=null

    fun getRetrofit(context: Context): Retrofit {
        var mContext:Context
        if (context is Application) {
            mContext = context
        } else {
            mContext = context.applicationContext
        }

        cookieJar =
            PersistentCookieJar(SetCookieCache(), SharedPrefsCookiePersistor(mContext))

        val okHttpClient = OkHttpClient.Builder()
            .addNetworkInterceptor(CustomLogInterceptor())
            .cookieJar(cookieJar!!)
            .build()
        return Retrofit.Builder()
            .client(okHttpClient)
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }

    fun <T> create(context: Context, serviceClass: Class<T>): T = getRetrofit(context).create(serviceClass)

    fun clearCookie() {
        cookieJar?.clear()
    }
}